001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Nov 28, 2002
005     * Time: 11:50:25 PM
006     */
007    
008    package EVolve.visualization.XYViz.RefRefViz;
009    
010    import EVolve.visualization.*;
011    import EVolve.visualization.Dimension;
012    import EVolve.visualization.VizFactory.VisualizationFactory;
013    import EVolve.data.*;
014    import EVolve.util.predefinedutils.VizInfo;
015    import EVolve.util.painters.CorrelationPainter;
016    import EVolve.exceptions.VizInfoCreateException;
017    import EVolve.Scene;
018    
019    import javax.swing.*;
020    import java.util.HashMap;
021    import java.awt.event.*;
022    
023    public class CorrelationViz extends ReferenceReferenceVisualization{
024        private int valueMax;
025        private JMenuItem itemSelectX, itemSelectY, itemSelectAllX, itemSelectAllY;
026        private static JMenuItem selectionMenu[] = null;
027    
028        public Dimension[] createDimension() {
029            Dimension[] returnVal = new Dimension[3];
030            Dimension[] temp = super.createDimension();
031    
032            zAxis = new ValueDimension();
033    
034            returnVal[0] = temp[0];
035            returnVal[1] = temp[1];
036            returnVal[2] = zAxis;
037    
038            return returnVal;
039        }
040    
041        public void preVisualize() {
042            super.preVisualize();
043            valueMax = 0;
044            image = new AutoImage();
045            value = new int[xAxis.getMaxEntityNumber()][yAxis.getMaxEntityNumber()];
046            for (int i = 0; i < value.length; i++) {
047                for (int j = 0; j < value[i].length; j++) {
048                    value[i][j] = 0;
049                }
050            }
051            installPainter();
052        }
053    
054        public void receiveElement(Element element) {
055            if (element.isOptional()) return;
056    
057            value[(int)xAxis.getField(element)][(int)yAxis.getField(element)] += zAxis.getField(element);
058    
059            if (value[(int)xAxis.getField(element)][(int)yAxis.getField(element)] > valueMax) {
060                valueMax = value[(int)xAxis.getField(element)][(int)yAxis.getField(element)];
061            }
062        }
063    
064        public void visualize() {
065            painter.paint(image,-1,-1,valueMax);
066            sort();
067        }
068    
069        public HashMap getCurrentConfigure() {
070            try {
071                HashMap configure = super.getCurrentConfigure();
072    
073                VizInfo vizInfo = new VizInfo();
074                vizInfo.setFactory((VisualizationFactory)configure.get("Factory"));
075                vizInfo.setSubject((ElementDefinition)configure.get("Subject"));
076    
077                String[] dimensionDefs = new String[3];
078                dimensionDefs[0] = xAxis.getName() ;
079                dimensionDefs[1] = yAxis.getName() ;
080                dimensionDefs[2] = zAxis.getName() ;
081                configure.put("Dimension",vizInfo.createDimension(dimensionDefs));
082    
083                return configure;
084            } catch (VizInfoCreateException e) {
085                Scene.showErrorMessage(e.getMessage());
086            }
087            return null;
088        }
089    
090        protected void updateConfiguration() {
091            info[0] = xAxis.getName() +": ";
092            info[1] = "    " + yAxis.getName() +": ";
093            info[2] = " Correlation: ";
094            
095            super.updateConfiguration();
096        }
097    
098        public long getxMax() {
099            return xAxis.getEntityNumber();
100        }
101    
102        protected void changeOrientation() {
103            int newValue[][] = new int[value[0].length][value.length];
104            for (int i = 0; i < newValue.length; i++) {
105                for (int j = 0; j < newValue[i].length ; j++) {
106                    newValue[i][j] = value[newValue[i].length - j - 1][newValue.length - i - 1];
107                }
108            }
109            value = newValue;
110            super.changeOrientation();
111        }
112    
113        protected void installPainter() {
114            painter = new CorrelationPainter(value);
115        }
116    
117        public JMenuItem[] createSelectionMenuItem() {
118            if (selectionMenu != null) return selectionMenu;
119    
120            itemSelectX = new JCheckBoxMenuItem("Occurred Entities on X Axis");
121            itemSelectX.setMnemonic(KeyEvent.VK_X);
122            itemSelectX.addActionListener(new ActionListener() {
123                public void actionPerformed(ActionEvent e) {
124                    boolean selected = itemSelectX.isSelected();
125                    SELECT_OPTION = switchOption(selected, SELECT_OPTION, SELECT_X_AXIS);
126    
127                    if (itemSelectAllX.isSelected() && selected) {
128                        itemSelectAllX.setSelected(false);
129                        SELECT_OPTION = switchOption(false,SELECT_OPTION,SELECT_ALL_X_AXIS);
130                    }
131                }
132            });
133            itemSelectX.setSelected(false);
134    
135            itemSelectAllX = new JCheckBoxMenuItem("All Entities on X Axis");
136            itemSelectAllX.setMnemonic(KeyEvent.VK_A);
137            itemSelectAllX.addActionListener(new ActionListener() {
138                public void actionPerformed(ActionEvent e) {
139                    boolean selected = itemSelectAllX.isSelected();
140                    SELECT_OPTION = switchOption(selected,SELECT_OPTION,SELECT_ALL_X_AXIS);
141    
142                    if (itemSelectX.isSelected() && selected) {
143                        itemSelectX.setSelected(false);
144                        SELECT_OPTION = switchOption(false,SELECT_OPTION,SELECT_X_AXIS);
145                    }
146                }
147            });
148            itemSelectAllX.setSelected(true);
149    
150            itemSelectY = new JCheckBoxMenuItem("Occurred Entities on Y Axis");
151            itemSelectY.setMnemonic(KeyEvent.VK_Y);
152            itemSelectY.addActionListener(new ActionListener() {
153                public void actionPerformed(ActionEvent e) {
154                    boolean selected = itemSelectY.isSelected();
155                    SELECT_OPTION = switchOption(selected, SELECT_OPTION, SELECT_Y_AXIS);
156    
157                    if (itemSelectAllY.isSelected() && selected) {
158                        itemSelectAllY.setSelected(false);
159                        SELECT_OPTION = switchOption(false,SELECT_OPTION, SELECT_ALL_Y_AXIS);
160                    }
161                }
162            });
163            itemSelectY.setSelected(false);
164    
165            itemSelectAllY = new JCheckBoxMenuItem("All Entities on Y Axis");
166            itemSelectAllY.setMnemonic(KeyEvent.VK_E);
167            itemSelectAllY.addActionListener(new ActionListener() {
168                public void actionPerformed(ActionEvent e) {
169                    boolean selected = itemSelectAllY.isSelected();
170                    SELECT_OPTION = switchOption(selected,SELECT_OPTION,SELECT_ALL_Y_AXIS);
171    
172                    if (itemSelectY.isSelected() && selected) {
173                        itemSelectY.setSelected(false);
174                        SELECT_OPTION = switchOption(false,SELECT_OPTION,SELECT_Y_AXIS);
175                    }
176                }
177            });
178            itemSelectAllY.setSelected(true);
179    
180            selectionMenu = new JMenuItem[4];
181            selectionMenu[0] = itemSelectX;
182            selectionMenu[1] = itemSelectAllX;
183            selectionMenu[2] = itemSelectY;
184            selectionMenu[3] = itemSelectAllY;
185    
186            return selectionMenu;
187        }
188    
189    
190    }